package leetcode; /**
 * description:
 * author:张腾
 * date:2021-06-13
 */

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作（push、pop、peek、empty）：
 *
 * 实现 MyQueue 类：
 *
 * void push(int x) 将元素 x 推到队列的末尾
 * int pop() 从队列的开头移除并返回元素
 * int peek() 返回队列开头的元素
 * boolean empty() 如果队列为空，返回 true ；否则，返回 false
 */
public class leetcode232 {

    class MyQueue {
        private Deque<Integer> s1;
        private Deque<Integer> s2;
        /** Initialize your data structure here. */
        public MyQueue() {
            s1 = new ArrayDeque<>();
            s2 = new ArrayDeque<>();
        }

        /** Push element x to the back of queue. */
        public void push(int x) {
            s1.push(x);
        }

        /** Removes the element from in front of queue and returns that element. */
        public int pop() {
            while (!s1.isEmpty()){
                Integer pop = s1.pop();
                s2.push(pop);
            }
            int res = s2.pop();
            while (!s2.isEmpty()){
                Integer pop = s2.pop();
                s1.push(pop);
            }
            return res;
        }

        /** Get the front element. */
        public int peek() {
            while (!s1.isEmpty()){
                Integer pop = s1.pop();
                s2.push(pop);
            }
            int res = s2.peek();
            while (!s2.isEmpty()){
                Integer pop = s2.pop();
                s1.push(pop);
            }
            return res;
        }

        /** Returns whether the queue is empty. */
        public boolean empty() {
            return s1.isEmpty();
        }
    }
}
